<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <link rel="icon" href="logo.png">
  <title>04-01 js面试题</title>
</head>
<body>
  <h2>04-01 js面试题</h2>

<!-- var -->
  <!-- <script>
    // var let const

    // 1. 变量提升 - 先上车后买票
    console.log('num=', num) // undefined
    var num = 123

    // 2. 变量覆盖 - 重复定义
    var num1 = 12
    var num1 = 34
    console.log('num1=', num1) // 34

    // 3. 没有块级作用域
    function fn2() {
      for (var i = 0; i < 3; i++) {
        console.log(i) // 0,1,2
      }
      console.log('for - end, i', i) // 3
    }
    fn2()
  </script> -->

<!-- const -->
  <script>
    // 1. const 声明之后必须赋值，否则报错
    // 2. 定义的值不能修改，否则报错
    // 3. 支持块let的其他属性

    // 一般 const 大写 是全局常量

    // ①
    // const de; // Uncaught SyntaxError: Missing initializer in const declaration

    // ②
    // const demo = 123;
    // demo = 456
    // console.log(demo) //Uncaught TypeError: Assignment to constant variable.
  </script>

<!-- let -->
<script>
    // ① 如果使用 ES6 方法，让变量的值 进行互换
    let a = 1; // 经常用框架，这里一般不写冒号；但浏览器是不行的。
    let b = 2;
    // ES6 - 解构方式
    [a, b] = [b, a]
    console.log('a=', a, ' b=', b)

    // ② 如何使用ES6，让数组去重
    let arr = [12, 43, 23, 12, 43, 55]
    let item = [... new Set(arr)]
    console.log('ES6处理数组去重 item=', item)

    // ③ promise
    // 标杆 - (Promise原理) 构造函数同步执行
    const promise = new Promise((resolve, reject) => {
      console.log(1)
      resolve()
      console.log(2)
    })
    // .then() 异步执行
    promise.then(() => {
      console.log(3)
    })
    console.log(4)
    // 结果: 1/2/4/3
  </script>
</body>
</html>